package com.quanxiaoha.framework.common.util;


import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;

/**
 * @Author: jingyan_liu
 * @CreateTime: 2025-07-03
 * @Description: 解决 LocalDateTime 的序列化问题
 * @Version: 1.0
 */


public class JsonUtils {
	// Jackson 库中用于序列化和反序列化 JSON 的核心类。
	// 它提供了一组方法，用于将 Java 对象转换为 JSON 字符串，以及将 JSON 字符串转换为 Java 对象。
	// 可以通过配置 ObjectMapper 来控制序列化和反序列化的行为，例如忽略未知属性、处理空值等。
	// 还可以注册自定义的模块，以支持特定的数据类型或格式。
	private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
	
	public static void init(ObjectMapper objectMapper) {
		OBJECT_MAPPER = objectMapper;
	}
	
	/**
	 * 将对象转换为 JSON 字符串
	 *
	 * @param obj
	 * @return
	 */
	//这是 Lombok 提供的一个注解，用于简化异常处理。它会将被标注的方法中的受检异常转换为不受检异常，使得代码看起来更加简洁
	@SneakyThrows
	public static String toJsonString(Object obj) {
		return OBJECT_MAPPER.writeValueAsString(obj);
	}
	
	/**
	 * 将 JSON 字符串转换为对象
	 *
	 * @param jsonStr:对象类的   JSON 字符串
	 * @param clazz:想要转换的目标类
	 * @return
	 */
	@SneakyThrows
	public static <T> T parseObject(String jsonStr, Class<T> clazz) {
		if (StringUtils.isBlank(jsonStr)) {
			return null;
		}
		return OBJECT_MAPPER.readValue(jsonStr, clazz);
	}
}
